<?php

require_once 'toolkit/settings.php';
require_once  SERVERPATH . '/classes/DB.php';
require_once  SERVERPATH . '/classes/Error.php';
include  		SERVERPATH . '/classes/Team.php';
 
 /**
  * Die Klasse Liga stellt verschiedene Methoden zum Abrufen von
  * Daten zur Liga aus der Datenbank bereit. Außerdem enthält die Klasse
  * Methoden zum Ändern der Eigenschaften zur Liga und zum Hinzufügen 
  * einer Liga
  * @author Stephan Behrndt
  */
 class Liga{
 	
 	// Datenbankverbindung
 	public $mysql;
 	// Eigenschaften zur Liga
 	public $liga_id;
 	public $bezeichnung;
 	public $jahr;
 	public $modus_is_ko;
 	public $land;
 	public $logopfad;
 	
 	// Array für Teams der Liga
 	public $teams;
 	// Array für alle verfügbaren Ligen
 	public $ligen;
 	
 	/**
 	 * Konstruktor
 	 */
 	function __construct(){
 		// Aufbau der Verbindung zur Datenbank
 		$this->mysql = 	new DB();
 	}
 	
 	/**
 	 * Ermitteln aller verfügbaren Ligen und speichern des Ergebnisses
 	 * in dem Array ligen
 	 */
 	function getAllLigen(){
 		// ligen ist ein Array
 		$this->ligen = array();
 		
 		// SQL-Statement
 		$query = 	"SELECT id, bezeichnung, jahr, modus_is_ko, land, logopfad
						FROM stedano_liga";
 						
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {		

			// Statement ausführen
			$stmt->execute();							
			// Ergebnisse in Variable speichern
			$stmt->bind_result(	$this->liga_id,
										$this->bezeichnung, 
										$this->jahr, 
										$this->modus_is_ko, 
										$this->land, 
										$this->logopfad);
										
			// Ergebnisse durchlaufen
			while($stmt->fetch())
		    {
		    	// Ligainformatiionen in Array speichern
       			$this->ligen[] = array(	'id' => $this->liga_id,
													'bezeichnung' => $this->bezeichnung, 
       												'jahr' => $this->jahr,
       												'modus_is_ko' => $this->modus_is_ko,
       												'land' => $this->land,
       												'logopfad' => $this->logopfad);
   			}
   			// Statement schließen
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Ligen nicht möglich", true);
		}
 	}
 	
 	/**
 	 * Ruft die Informationen zur Liga aus der Datenbank ab und setzt die
 	 * entsprechenden Klassenvariablen
 	 * @return boolean true wenn Liga vorhanden
 	 * 							false wenn Liga nicht vorhanden
 	 */
 	function getLiga($id){
 		// Liga-ID setzen
 		$this->liga_id = $id;
 		
 		// SQL-Statement
 		$query = 	"SELECT bezeichnung, jahr, modus_is_ko, land, logopfad
					FROM stedano_liga
					WHERE id = ?
					LIMIT 1";
		
		// Prepared Statement erzeuegn
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('i', $id);
			// Statement ausführen
			$stmt->execute();
			// Ergebnisse in Variablen speichern
			$stmt->bind_result(		$this->bezeichnung, 
									$this->jahr, 
									$this->modus_is_ko, 
									$this->land, 
									$this->logopfad);
			// Ergebnis prüfen
			if($stmt->fetch()) {
				// Statement schließen
				$stmt->close();
				return true;	
			}
			else{
				// Statement schließen
				$stmt->close();
				return false;
			} 
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Ligainformationen nicht möglich", true);
		}
 	}
 	
 	/**
 	 * Hinzufügen einer neuen Liga
 	 * @param string bezeichnung Bezeichnung der Liga
 	 * @param int jahr Jahr in welchem die Liga gestartet wurde
 	 * @param boolean modus_is_ko true wenn K.o.-Modus; sonst false
 	 * @param string land Land in welchem die Liga stattfindet
 	 * @param logopfad Pfad zum Logo der Liga
 	 */
	function addLiga($bezeichnung, $jahr, $modus_is_ko, $land, $logopfad){
		// SQL-Statement
 		$query = 	"INSERT INTO stedano_liga
 					(bezeichnung, jahr, modus_is_ko, land, logopfad)
					VALUES (?, ?, ?, ?, ?)";
					
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
					
			// Parameter in das Statement übernehmen
			$stmt->bind_param('siiss',$bezeichnung,
									  $jahr,
									  $modus_is_ko,
									  $land,
									  $logopfad);
			// Statement ausfürhen	
			if(!$stmt->execute()){
				// Fehlermeldung							
				new Error ("Die Liga konnte nicht hinzugefügt werden", true);
			}
			
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Hinzufügen der Liga nicht möglich", true);
		}						
 	}
 	
 	/**
 	 * Abrufen der Informationen zu allen Teams der Liga und speichern der Informationen
 	 * in dem Array teams
 	 */
 	function getAllTeams(){
		// Teams ist ein Array
 		$this->teams = array();
 		
 		// SQL-Statement
 		$query = 	"SELECT id
						FROM stedano_teams 				 
 						WHERE liga_id = ?";
 						
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {		
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
										
			$teamId = null;
			// Ergebnisse zu Variablen zuweisen
			$stmt->bind_result($teamId);
			while($stmt->fetch())
		    {
		    	// Teaminformationen abrufen
        		$team = new Team();
        		$team->getTeam($teamId);
        		
        		// Team zu Array hinzufügen
        		$this->teams[$team->id] = $team;
       		}
    		// Statement schließen
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Teaminformationen nicht möglich", true);
		}
 	}
 	
 	/**
 	 * Funktion zum Ändern der Bezeichung der aktuell geladenen Liga (getLiga())
 	 * @param string bezeichung Neue Bezeichnung der Liga
 	 */
 	function changeName($bezeichnung){
 		$query = 	"UPDATE stedano_liga
 					SET bezeichnung = ?
					WHERE id = ?";
					
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('si', $bezeichnung, $this->liga_id);
			
			// Statement ausführen
			if(!$stmt->execute()){
				new Error("Die Bezeichnung der Liga konnte nicht geändert werden", true);
			}
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Ändern der Bezeichnung nicht möglich", true);
		}
 	}
 	
 	/**
 	 * Funktion zum Ändern des Logopfad der aktuell geladenen Liga (getLiga())
 	 * @param string pfad Neuer Logopfad
 	 */
 	function changeLogo($pfad){
 		// SQL-Statement
 		$query = 	"UPDATE stedano_liga
 					SET logopfad = ?
					WHERE id = ?";
					
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('si', $pfad, $this->liga_id);
			
			// Statement ausführen
			if(!$stmt->execute()){
				// Fehlermeldung
				new Error ("Der Logopfad konnte nicht geändert werden", true);
			}
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Ändern des Landes nicht möglich", true);
		}	
 	}
 	
 	/**
 	 * Funktion zum Ändern des Landes der aktuell geladenen Liga (getLiga())
 	 * @param string land Neues Land der Liga
 	 */
 	function changeLand($land){
 		// SQL-Statement
 		$query = 	"UPDATE stedano_liga
 					SET land = ?
					WHERE id = ?";
		
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('si', $land, $this->liga_id);
			
			// Statement ausführen
			if(!$stmt->execute()){
				// Fehlermeldung
				new Error ("Das Land konnte nicht geändert werden", true);
			}
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Ändern des Landes nicht möglich", true);
		}	
 	}
 	
 	/**
 	 * Funktion zum Ändern des Jahres der aktuell geladenen Liga (getLiga())
 	 * @param int bezeichung Neues Jahr der Liga
 	 */
 	function changeJahr($jahr){
 		// SQL-Statement
 		$query = 	"UPDATE stedano_liga
 					SET jahr = ?
					WHERE id = ?";
					
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('si', $jahr, $this->liga_id);
			
			// Statement ausführen
			if(!$stmt->execute()){
				// Fehlermeldung
				new Error("Das Jahr konnte nicht geändert werden", true);
			}
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Ändern des Jahres nicht möglich", true);
		}	
 	}
 	
 	/**
 	 * Funktion zum Ändern des Modus der aktuell geladenen Liga (getLiga())
 	 * @param boolean true wenn K.o.-Modus; sonst false
 	 */
 	function changeModus($modus){
 		// SQL-Statement
 		$query = 	"UPDATE stedano_liga
 					SET modus_is_ko = ?
					WHERE id = ?";
		
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter in das Statement übernehmen
			$stmt->bind_param('ii', $modus, $this->liga_id);	
			
			// Statement ausführen
			if(!$stmt->execute()){
				// Fehlermeldung
				new Error("Der Modus konnte nicht geändert werden", true);
			}
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Ändern des Modus nicht möglich", true);
		}	
 	}
 	
 	/**
 	 * Hinzufügen eines neuen Teams zur aktuell geladenen Liga (getLiga())
 	 * @param string kurzname Kurzname des neuen Teams (3 Buchstaben)
 	 * @param string langname Langname des Teams
 	 */
 	function addTeam($kurzname, $langname){
 		// SQL-Statement
 		$query = "INSERT INTO stedano_teams (kurzname, langname, liga_id)" .
 				"VALUES (?,?,?)";
 		
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)){
 			
 			// Parameter in das Statement übernehmen
 			$stmt->bind_param('ssi', $kurzname, $langname, $this->liga_id);
 			
 			// Statement ausführen
			if(!$stmt->execute()){	 			
				// Fehlermeldung
				new Error("Das Team konnte nicht hinzugefügt werden", true);
			}
 		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Hinzufügen des Teams nicht möglich", true);
		}
	}
	
	/**
	 * Löschen der aktuellen Liga (inkl. Teams, Ergebnissen, Tipps zu der Liga)
	 */
	function deleteLiga(){
		//Transaktion beginnen
		mysql_query("BEGIN");
		
		// Teams löschen
		$query = 	"DELETE FROM stedano_teams
 						WHERE liga_id = ?";
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
			// Statement schließen
			$stmt->close();
 		}
 		
 		// Tipps löschen
 		$query = 	"DELETE FROM stedano_tipp
 						WHERE spiel_id IN (
 								SELECT id 
 								FROM stedano_spielplan
 								WHERE liga_id = ?)";
 		 // Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
			// Statement schließen
			$stmt->close();
 		}

 		// Ergebnisse löschen
 		$query = 	"DELETE FROM stedano_ergebnisse
 						WHERE spiel_id IN (
 								SELECT id 
 								FROM stedano_spielplan
 								WHERE liga_id = ?)";
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
			// Statement schließen
			$stmt->close();
 		}

		// Spiele löschen
		$query = 	"DELETE FROM stedano_spielplan
 						WHERE liga_id = ?";
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
			// Statement schließen
			$stmt->close();
 		}

		// Liga löschen		
		$query = 	"DELETE FROM stedano_liga
 						WHERE id = ?";
 		// Prepared Statement erzeugen
 		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $this->liga_id);
			// Statement ausführen
			$stmt->execute();
			// Statement schließen
			$stmt->close();
 		}

		// Transaktion abschicken
		if(!mysql_query("COMMIT")){
			// Rollback bei Fehler
			mysql_query("ROLLBACK");
			new Error("Die Liga konnte nicht gelöscht werden", true);
		}

 	}
 	
 }
 
?>
